跳至主要内容

NVIDIA TensorRT 模型轉換指南

將 ONNX 模型轉換為 TensorRT 引擎並進行 FP16/INT8 優化的完整實施指南。


使用案例

應用:在 NVIDIA GPU 上加速深度學習推論

優點

  • 相比 CUDA 的性能提升
  • 降低實時推論延遲
  • 優化記憶體使用
  • 支援 FP16 和 INT8 量化

背景分析

為什麼使用 TensorRT?

TensorRT 是一個高性能深度學習推論優化器和運行時,可為部署深度學習模型提供最佳性能。

主要功能

  • ✅ 自動核心優化
  • ✅ 層融合和精度校準
  • ✅ 動態張量形狀
  • ✅ 多 GPU 支援
  • ✅ 生產環境部署

為什麼使用 TensorRT

支援平台

平台需求
硬體NVIDIA GPU(Jetson、Tesla、GeForce 等)
作業系統Ubuntu 20.04/22.04、Windows 10/11
驅動最新 NVIDIA 驅動
CUDACUDA 12.5 或更高版本

TensorRT 支援矩陣


實施步驟

步驟 1:硬體驗證

先決條件

  • NVIDIA GPU 設備
  • Ubuntu OS(推薦 22.04)
  • 已安裝最新 NVIDIA 驅動

驗證命令

# 檢查 GPU 存在
nvidia-smi

# 檢查 CUDA 版本
nvcc --version

實戰範例

  • 硬體:ASR-A701
  • 平台:NVIDIA Jetson Orin

步驟 2:安裝 NVIDIA 驅動

如果使用 Jetson 平台,可以跳過此步驟。

準備

  1. NVIDIA 網站 下載最新 NVIDIA 驅動
  2. 將 Nouveau 驅動加入黑名單

安裝

# 將 Nouveau 驅動加入黑名單
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u

# 重新啟動系統
sudo reboot

# 安裝 NVIDIA 驅動
sudo chmod +x *.run
sudo ./*.run

驗證

# 檢查驅動安裝
nvidia-smi

驅動安裝

nvidia-smi 輸出


步驟 3:安裝 CUDA Toolkit

如果使用 Jetson 平台,可以跳過此步驟。

安裝

# 新增 CUDA 儲存庫
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1_all.deb
sudo apt update

# 安裝 CUDA Toolkit 12.6
sudo apt install cuda-toolkit-12-6

驗證

# 檢查 CUDA 安裝
/usr/local/cuda/bin/nvcc -V

CUDA 安裝


步驟 4:安裝 TensorRT

如果使用 Jetson 平台,可以跳過此步驟。

儲存庫設置

# 新增 NVIDIA 儲存庫金鑰
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub

# 新增儲存庫
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"

# 更新套件清單
sudo apt-get update

安裝 TensorRT 套件

sudo apt-get install \
libnvinfer-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-dispatch-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-dispatch10=10.3.0.26-1+cuda12.5 \
libnvinfer-headers-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-headers-plugin-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-lean-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-lean10=10.3.0.26-1+cuda12.5 \
libnvinfer-plugin-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-plugin10=10.3.0.26-1+cuda12.5 \
libnvinfer-vc-plugin-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-vc-plugin10=10.3.0.26-1+cuda12.5 \
libnvinfer10=10.3.0.26-1+cuda12.5 \
libnvonnxparsers-dev=10.3.0.26-1+cuda12.5 \
libnvonnxparsers10=10.3.0.26-1+cuda12.5 \
tensorrt-dev=10.3.0.26-1+cuda12.5 \
libnvinfer-samples=10.3.0.26-1+cuda12.5 \
libnvinfer-bin=10.3.0.26-1+cuda12.5 \
libcudnn9-cuda-12=9.3.0.75-1 \
libcudnn9-dev-cuda-12=9.3.0.75-1

鎖定 TensorRT 套件

sudo apt-mark hold \
libnvinfer* \
libnvparsers* \
libnvonnxparsers* \
libcudnn9* \
python3-libnvinfer* \
uff-converter-tf* \
onnx-graphsurgeon* \
graphsurgeon-tf* \
tensorrt*

驗證

# 檢查 TensorRT 安裝
/usr/src/tensorrt/bin/trtexec --help

# 驗證安裝版本
dpkg -l | grep TensorRT

TensorRT 安裝


步驟 5:將 ONNX 模型轉換為 TensorRT 引擎

模型準備

  • 將神經網路轉換為 ONNX 格式
  • 確保 ONNX 模型與 TensorRT 相容

轉換命令

# 將 ONNX 模型轉換為 TensorRT 引擎(FP16 + INT8)
# Jetson 請使用 /usr/src/tensorrt/bin/trtexec
$ trtexec --onnx=your_model.onnx \
--saveEngine=model_int8.engine \
--int8 --fp16

轉換選項

  • --onnx=<path>:輸入 ONNX 模型檔案
  • --saveEngine=<path>:輸出 TensorRT 引擎檔案
  • --int8:啟用 INT8 量化(需要校準)
  • --fp16:啟用 FP16 精度

模型轉換


步驟 6:運行 TensorRT 引擎

執行

# 載入並運行 TensorRT 引擎
# Jetson 請使用 /usr/src/tensorrt/bin/trtexec
$ trtexec --loadEngine=model_int8.engine \
--warmUp=200 \
--duration=120 \
--device=0

性能指標

  • WarmUp:200 次迭代以穩定
  • Duration:120 秒測量期間
  • Device:GPU 設備索引(單 GPU 為 0)

引擎執行 性能結果


快速開始指南

完整工作流程

# 1. 驗證安裝
nvidia-smi
nvcc --version

# 2. 轉換模型
trtexec --onnx=model.onnx --saveEngine=model.engine --fp16

# 3. 運行推論
trtexec --loadEngine=model.engine --duration=120

常見使用案例

情境命令
僅 FP16trtexec --onnx=model.onnx --saveEngine=model.engine --fp16
僅 INT8trtexec --onnx=model.onnx --saveEngine=model.engine --int8
混合精度trtexec --onnx=model.onnx --saveEngine=model.engine --int8 --fp16
配置 GPUtrtexec --onnx=model.onnx --profilingVerbosity=detailed --profile=profile.txt

參考


額外資源

優化提示

  1. 大多數模型使用 FP16 - 以最小精度損失獲得 2 倍速度提升
  2. 為可量化模型啟用 INT8 - 額外 2 倍速度提升
  3. 配置您的模型 - 使用 --profilingVerbosity=detailed 識別瓶頸
  4. 批次大小優化 - 根據您的使用案例和延遲需求調整

故障排除

常見問題

  • 安裝失敗:檢查 NVIDIA 驅動版本相容性
  • 引擎轉換失敗:驗證 ONNX 模型格式和 opset 版本
  • 性能問題:確保 GPU 未降頻且散熱充足

← 返回 解決方案 總覽